class Solution {
    public int maxProduct(int[] nums) {
        // 创建 dp 表、初始化、填表、返回值
        int n = nums.length;
        int[] f = new int[n];
        int[] g = new int[n];

        f[0] = g[0] = nums[0];

        for (int i = 1; i < n; i++) {
            // 这里采用分类讨论的做法，也可以采用暴力求解最大值的方式
            if (nums[i] > 0) {
                f[i] = Math.max(nums[i], f[i-1]*nums[i]);
                g[i] = Math.min(nums[i], g[i-1]*nums[i]);
            } else {
                f[i] = Math.max(nums[i], g[i-1]*nums[i]);
                g[i] = Math.min(nums[i], f[i-1]*nums[i]);
            }
        }

        // 遍历f数组找出最大乘积值即可
        int ret = Integer.MIN_VALUE; // 注意初始化的问题
        for (int i = 0; i < n; i++) {
            ret = Math.max(ret, f[i]);
        }
        
        return ret;
    }
}